package com.friend.chat.utils;

import android.content.Context;
import android.text.Spannable;
import android.text.style.ImageSpan;

import com.friend.chat.R;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class EmojiUtil {
    public static final String emoji_1 = "[:001]";
    public static final String emoji_2 = "[:002]";
    public static final String emoji_3 = "[:003]";
    public static final String emoji_4 = "[:004]";
    public static final String emoji_5 = "[:005]";
    public static final String emoji_6 = "[:006]";
    public static final String emoji_7 = "[:007]";
    public static final String emoji_8 = "[:008]";
    public static final String emoji_9 = "[:009]";

    public static final String emoji_10 = "[:010]";
    public static final String emoji_11 = "[:011]";
    public static final String emoji_12 = "[:012]";
    public static final String emoji_13 = "[:013]";
    public static final String emoji_14 = "[:014]";
    public static final String emoji_15 = "[:015]";
    public static final String emoji_16 = "[:016]";
    public static final String emoji_17 = "[:017]";
    public static final String emoji_18 = "[:018]";
    public static final String emoji_19 = "[:019]";

    public static final String emoji_20 = "[:020]";
    public static final String emoji_21 = "[:021]";
    public static final String emoji_22 = "[:022]";
    public static final String emoji_23 = "[:023]";
    public static final String emoji_24 = "[:024]";
    public static final String emoji_25 = "[:025]";
    public static final String emoji_26 = "[:026]";
    public static final String emoji_27 = "[:027]";
    public static final String emoji_28 = "[:028]";
    public static final String emoji_29 = "[:029]";


    public static final String emoji_30 = "[:030]";
    public static final String emoji_31 = "[:031]";
    public static final String emoji_32 = "[:032]";
    public static final String emoji_33 = "[:033]";
    public static final String emoji_34 = "[:034]";
    public static final String emoji_35 = "[:035]";
    public static final String emoji_36 = "[:036]";
    public static final String emoji_37 = "[:037]";
    public static final String emoji_38 = "[:038]";
    public static final String emoji_39 = "[:039]";

    public static final String emoji_40 = "[:040]";
    public static final String emoji_41 = "[:041]";
    public static final String emoji_42 = "[:042]";
    public static final String emoji_43 = "[:043]";
    public static final String emoji_44 = "[:044]";
    public static final String emoji_45 = "[:045]";
    public static final String emoji_46 = "[:046]";
    public static final String emoji_47 = "[:047]";
    public static final String emoji_48 = "[:048]";
    public static final String emoji_49 = "[:049]";


    public static final String emoji_50 = "[:050]";
    public static final String emoji_51 = "[:051]";
    public static final String emoji_52 = "[:052]";
    public static final String emoji_53 = "[:053]";
    public static final String emoji_54 = "[:054]";
    public static final String emoji_55 = "[:055]";
    public static final String emoji_56 = "[:056]";
    public static final String emoji_57 = "[:057]";
    public static final String emoji_58 = "[:058]";
    public static final String emoji_59 = "[:059]";

    public static final String emoji_60 = "[:060]";
    public static final String emoji_61 = "[:061]";
    public static final String emoji_62 = "[:062]";
    public static final String emoji_63 = "[:063]";
    public static final String emoji_64 = "[:064]";
    public static final String emoji_65 = "[:065]";
    public static final String emoji_66 = "[:066]";
    public static final String emoji_67 = "[:067]";
    public static final String emoji_68 = "[:068]";
    public static final String emoji_69 = "[:069]";

    public static final String emoji_70 = "[:070]";
    public static final String emoji_71 = "[:071]";
    public static final String emoji_72 = "[:072]";
    public static final String emoji_73 = "[:073]";
    public static final String emoji_74 = "[:074]";
    public static final String emoji_75 = "[:075]";
    public static final String emoji_76 = "[:076]";
    public static final String emoji_77 = "[:077]";
    public static final String emoji_78 = "[:078]";
    public static final String emoji_79 = "[:079]";

    public static final String emoji_80 = "[:080]";
    public static final String emoji_81 = "[:081]";
    public static final String emoji_82 = "[:082]";
    public static final String emoji_83 = "[:083]";
    public static final String emoji_84 = "[:084]";
    public static final String emoji_85 = "[:085]";
    public static final String emoji_86 = "[:086]";
    public static final String emoji_87 = "[:087]";
    public static final String emoji_88 = "[:088]";
    public static final String emoji_89 = "[:089]";

    public static final String emoji_90 = "[:090]";
    public static final String emoji_91 = "[:091]";
    public static final String emoji_92 = "[:092]";
    public static final String emoji_93 = "[:093]";
    public static final String emoji_94 = "[:094]";
    public static final String emoji_95 = "[:095]";
    public static final String emoji_96 = "[:096]";
    public static final String emoji_97 = "[:097]";
    public static final String emoji_98 = "[:098]";
    public static final String emoji_99 = "[:099]";
    public static final String emoji_100 = "[:100]";
    public static final String emoji_101 = "[:101]";
    public static final String emoji_102 = "[:102]";
    public static final String emoji_103 = "[:103]";
    public static final String emoji_104 = "[:104]";
    public static final String emoji_105 = "[:105]";
    public static final String emoji_106 = "[:106]";
    public static final String emoji_107 = "[:107]";
    public static final String emoji_108 = "[:108]";
    public static final String emoji_109 = "[:109]";
    public static final String emoji_110 = "[:110]";


    private static final List<EmojiBean> emojiList = new ArrayList<>();

    private static final Spannable.Factory spannableFactory = Spannable.Factory
            .getInstance();

    private static final Map<Pattern, Integer> emoticons = new HashMap<>();

    static {




        addPattern(emoticons, emoji_1, R.mipmap.emoj_1);
        addPattern(emoticons, emoji_2, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_3, R.mipmap.emoj_3);
        addPattern(emoticons, emoji_4, R.mipmap.emoj_4);
        addPattern(emoticons, emoji_5, R.mipmap.emoj_5);
        addPattern(emoticons, emoji_6, R.mipmap.emoj_6);
        addPattern(emoticons, emoji_7, R.mipmap.emoj_7);
        addPattern(emoticons, emoji_8, R.mipmap.emoj_8);
        addPattern(emoticons, emoji_9, R.mipmap.emoj_9);

        addPattern(emoticons, emoji_10, R.mipmap.emoj_10);
        addPattern(emoticons, emoji_11, R.mipmap.emoj_11);
        addPattern(emoticons, emoji_12, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_13, R.mipmap.emoj_13);
        addPattern(emoticons, emoji_14, R.mipmap.emoj_14);
        addPattern(emoticons, emoji_15, R.mipmap.emoj_15);
        addPattern(emoticons, emoji_16, R.mipmap.emoj_16);
        addPattern(emoticons, emoji_17, R.mipmap.emoj_17);
        addPattern(emoticons, emoji_18, R.mipmap.emoj_18);
        addPattern(emoticons, emoji_19, R.mipmap.emoj_19);

        addPattern(emoticons, emoji_20, R.mipmap.emoj_20);
        addPattern(emoticons, emoji_21, R.mipmap.emoj_21);
        addPattern(emoticons, emoji_22, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_23, R.mipmap.emoj_23);
        addPattern(emoticons, emoji_24, R.mipmap.emoj_24);
        addPattern(emoticons, emoji_25, R.mipmap.emoj_25);
        addPattern(emoticons, emoji_26, R.mipmap.emoj_26);
        addPattern(emoticons, emoji_27, R.mipmap.emoj_27);
        addPattern(emoticons, emoji_28, R.mipmap.emoj_28);
        addPattern(emoticons, emoji_29, R.mipmap.emoj_29);

        addPattern(emoticons, emoji_30, R.mipmap.emoj_30);
        addPattern(emoticons, emoji_31, R.mipmap.emoj_31);
        addPattern(emoticons, emoji_32, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_33, R.mipmap.emoj_33);
        addPattern(emoticons, emoji_34, R.mipmap.emoj_34);
        addPattern(emoticons, emoji_35, R.mipmap.emoj_35);
        addPattern(emoticons, emoji_36, R.mipmap.emoj_36);
        addPattern(emoticons, emoji_37, R.mipmap.emoj_37);
        addPattern(emoticons, emoji_38, R.mipmap.emoj_38);
        addPattern(emoticons, emoji_39, R.mipmap.emoj_39);

        addPattern(emoticons, emoji_40, R.mipmap.emoj_40);
        addPattern(emoticons, emoji_44, R.mipmap.emoj_44);
        addPattern(emoticons, emoji_42, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_43, R.mipmap.emoj_43);
        addPattern(emoticons, emoji_44, R.mipmap.emoj_44);
        addPattern(emoticons, emoji_45, R.mipmap.emoj_45);
        addPattern(emoticons, emoji_46, R.mipmap.emoj_46);
        addPattern(emoticons, emoji_47, R.mipmap.emoj_47);
        addPattern(emoticons, emoji_48, R.mipmap.emoj_48);
        addPattern(emoticons, emoji_49, R.mipmap.emoj_49);

        addPattern(emoticons, emoji_50, R.mipmap.emoj_50);
        addPattern(emoticons, emoji_55, R.mipmap.emoj_55);
        addPattern(emoticons, emoji_52, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_53, R.mipmap.emoj_53);
        addPattern(emoticons, emoji_54, R.mipmap.emoj_54);
        addPattern(emoticons, emoji_55, R.mipmap.emoj_55);
        addPattern(emoticons, emoji_56, R.mipmap.emoj_56);
        addPattern(emoticons, emoji_57, R.mipmap.emoj_57);
        addPattern(emoticons, emoji_58, R.mipmap.emoj_58);
        addPattern(emoticons, emoji_59, R.mipmap.emoj_59);

        addPattern(emoticons, emoji_60, R.mipmap.emoj_60);
        addPattern(emoticons, emoji_66, R.mipmap.emoj_66);
        addPattern(emoticons, emoji_62, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_63, R.mipmap.emoj_63);
        addPattern(emoticons, emoji_64, R.mipmap.emoj_64);
        addPattern(emoticons, emoji_65, R.mipmap.emoj_65);
        addPattern(emoticons, emoji_66, R.mipmap.emoj_66);
        addPattern(emoticons, emoji_67, R.mipmap.emoj_67);
        addPattern(emoticons, emoji_68, R.mipmap.emoj_68);
        addPattern(emoticons, emoji_69, R.mipmap.emoj_69);

        addPattern(emoticons, emoji_70, R.mipmap.emoj_70);
        addPattern(emoticons, emoji_71, R.mipmap.emoj_71);
        addPattern(emoticons, emoji_72, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_73, R.mipmap.emoj_73);
        addPattern(emoticons, emoji_74, R.mipmap.emoj_74);
        addPattern(emoticons, emoji_75, R.mipmap.emoj_75);
        addPattern(emoticons, emoji_76, R.mipmap.emoj_76);
        addPattern(emoticons, emoji_77, R.mipmap.emoj_77);
        addPattern(emoticons, emoji_78, R.mipmap.emoj_78);
        addPattern(emoticons, emoji_79, R.mipmap.emoj_79);

        addPattern(emoticons, emoji_80, R.mipmap.emoj_80);
        addPattern(emoticons, emoji_81, R.mipmap.emoj_81);
        addPattern(emoticons, emoji_82, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_83, R.mipmap.emoj_83);
        addPattern(emoticons, emoji_84, R.mipmap.emoj_84);
        addPattern(emoticons, emoji_85, R.mipmap.emoj_85);
        addPattern(emoticons, emoji_86, R.mipmap.emoj_86);
        addPattern(emoticons, emoji_87, R.mipmap.emoj_87);
        addPattern(emoticons, emoji_88, R.mipmap.emoj_88);
        addPattern(emoticons, emoji_89, R.mipmap.emoj_89);

        addPattern(emoticons, emoji_90, R.mipmap.emoj_90);
        addPattern(emoticons, emoji_91, R.mipmap.emoj_91);
        addPattern(emoticons, emoji_92, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_93, R.mipmap.emoj_93);
        addPattern(emoticons, emoji_94, R.mipmap.emoj_94);
        addPattern(emoticons, emoji_95, R.mipmap.emoj_95);
        addPattern(emoticons, emoji_96, R.mipmap.emoj_96);
        addPattern(emoticons, emoji_97, R.mipmap.emoj_97);
        addPattern(emoticons, emoji_98, R.mipmap.emoj_98);
        addPattern(emoticons, emoji_99, R.mipmap.emoj_99);

        addPattern(emoticons, emoji_100, R.mipmap.emoj_100);
        addPattern(emoticons, emoji_101, R.mipmap.emoj_101);
        addPattern(emoticons, emoji_102, R.mipmap.emoj_2);
        addPattern(emoticons, emoji_103, R.mipmap.emoj_103);
        addPattern(emoticons, emoji_104, R.mipmap.emoj_104);
        addPattern(emoticons, emoji_105, R.mipmap.emoj_105);
        addPattern(emoticons, emoji_106, R.mipmap.emoj_106);
        addPattern(emoticons, emoji_107, R.mipmap.emoj_107);
        addPattern(emoticons, emoji_108, R.mipmap.emoj_108);
        addPattern(emoticons, emoji_109, R.mipmap.emoj_109);
        addPattern(emoticons, emoji_110, R.mipmap.emoj_110);
    }

    public static List<EmojiBean> getEmojiList(){
        emojiList.clear();
        emojiList.add(new EmojiBean(emoji_1, R.mipmap.emoj_1));
        emojiList.add(new EmojiBean(emoji_2, R.mipmap.emoj_2));
        emojiList.add(new EmojiBean(emoji_3, R.mipmap.emoj_3));
        emojiList.add(new EmojiBean(emoji_4, R.mipmap.emoj_4));
        emojiList.add(new EmojiBean(emoji_5, R.mipmap.emoj_5));
        emojiList.add(new EmojiBean(emoji_6, R.mipmap.emoj_6));
        emojiList.add(new EmojiBean(emoji_7, R.mipmap.emoj_7));
        emojiList.add(new EmojiBean(emoji_8, R.mipmap.emoj_8));
        emojiList.add(new EmojiBean(emoji_9, R.mipmap.emoj_9));

        emojiList.add(new EmojiBean(emoji_10, R.mipmap.emoj_10));
        emojiList.add(new EmojiBean(emoji_11, R.mipmap.emoj_11));
        emojiList.add(new EmojiBean(emoji_12, R.mipmap.emoj_12));
        emojiList.add(new EmojiBean(emoji_13, R.mipmap.emoj_13));
        emojiList.add(new EmojiBean(emoji_14, R.mipmap.emoj_14));
        emojiList.add(new EmojiBean(emoji_15, R.mipmap.emoj_15));
        emojiList.add(new EmojiBean(emoji_16, R.mipmap.emoj_16));
        emojiList.add(new EmojiBean(emoji_17, R.mipmap.emoj_17));
        emojiList.add(new EmojiBean(emoji_18, R.mipmap.emoj_18));
        emojiList.add(new EmojiBean(emoji_19, R.mipmap.emoj_19));

        emojiList.add(new EmojiBean(emoji_20, R.mipmap.emoj_20));
        emojiList.add(new EmojiBean(emoji_21, R.mipmap.emoj_21));
        emojiList.add(new EmojiBean(emoji_22, R.mipmap.emoj_22));
        emojiList.add(new EmojiBean(emoji_23, R.mipmap.emoj_23));
        emojiList.add(new EmojiBean(emoji_24, R.mipmap.emoj_24));
        emojiList.add(new EmojiBean(emoji_25, R.mipmap.emoj_25));
        emojiList.add(new EmojiBean(emoji_26, R.mipmap.emoj_26));
        emojiList.add(new EmojiBean(emoji_27, R.mipmap.emoj_27));
        emojiList.add(new EmojiBean(emoji_28, R.mipmap.emoj_28));
        emojiList.add(new EmojiBean(emoji_29, R.mipmap.emoj_29));

        emojiList.add(new EmojiBean(emoji_30, R.mipmap.emoj_30));
        emojiList.add(new EmojiBean(emoji_31, R.mipmap.emoj_31));
        emojiList.add(new EmojiBean(emoji_32, R.mipmap.emoj_32));
        emojiList.add(new EmojiBean(emoji_33, R.mipmap.emoj_33));
        emojiList.add(new EmojiBean(emoji_34, R.mipmap.emoj_34));
        emojiList.add(new EmojiBean(emoji_35, R.mipmap.emoj_35));
        emojiList.add(new EmojiBean(emoji_36, R.mipmap.emoj_36));
        emojiList.add(new EmojiBean(emoji_37, R.mipmap.emoj_37));
        emojiList.add(new EmojiBean(emoji_38, R.mipmap.emoj_38));
        emojiList.add(new EmojiBean(emoji_39, R.mipmap.emoj_39));

        emojiList.add(new EmojiBean(emoji_40, R.mipmap.emoj_40));
        emojiList.add(new EmojiBean(emoji_41, R.mipmap.emoj_41));
        emojiList.add(new EmojiBean(emoji_42, R.mipmap.emoj_42));
        emojiList.add(new EmojiBean(emoji_43, R.mipmap.emoj_43));
        emojiList.add(new EmojiBean(emoji_44, R.mipmap.emoj_44));
        emojiList.add(new EmojiBean(emoji_45, R.mipmap.emoj_45));
        emojiList.add(new EmojiBean(emoji_46, R.mipmap.emoj_46));
        emojiList.add(new EmojiBean(emoji_47, R.mipmap.emoj_47));
        emojiList.add(new EmojiBean(emoji_48, R.mipmap.emoj_48));
        emojiList.add(new EmojiBean(emoji_49, R.mipmap.emoj_49));

        emojiList.add(new EmojiBean(emoji_50, R.mipmap.emoj_50));
        emojiList.add(new EmojiBean(emoji_51, R.mipmap.emoj_51));
        emojiList.add(new EmojiBean(emoji_52, R.mipmap.emoj_52));
        emojiList.add(new EmojiBean(emoji_53, R.mipmap.emoj_53));
        emojiList.add(new EmojiBean(emoji_54, R.mipmap.emoj_54));
        emojiList.add(new EmojiBean(emoji_55, R.mipmap.emoj_55));
        emojiList.add(new EmojiBean(emoji_56, R.mipmap.emoj_56));
        emojiList.add(new EmojiBean(emoji_57, R.mipmap.emoj_57));
        emojiList.add(new EmojiBean(emoji_58, R.mipmap.emoj_58));
        emojiList.add(new EmojiBean(emoji_59, R.mipmap.emoj_59));

        emojiList.add(new EmojiBean(emoji_60, R.mipmap.emoj_60));
        emojiList.add(new EmojiBean(emoji_61, R.mipmap.emoj_61));
        emojiList.add(new EmojiBean(emoji_62, R.mipmap.emoj_62));
        emojiList.add(new EmojiBean(emoji_63, R.mipmap.emoj_63));
        emojiList.add(new EmojiBean(emoji_64, R.mipmap.emoj_64));
        emojiList.add(new EmojiBean(emoji_65, R.mipmap.emoj_65));
        emojiList.add(new EmojiBean(emoji_66, R.mipmap.emoj_66));
        emojiList.add(new EmojiBean(emoji_67, R.mipmap.emoj_67));
        emojiList.add(new EmojiBean(emoji_68, R.mipmap.emoj_68));
        emojiList.add(new EmojiBean(emoji_69, R.mipmap.emoj_69));

        emojiList.add(new EmojiBean(emoji_70, R.mipmap.emoj_70));
        emojiList.add(new EmojiBean(emoji_71, R.mipmap.emoj_71));
        emojiList.add(new EmojiBean(emoji_72, R.mipmap.emoj_72));
        emojiList.add(new EmojiBean(emoji_73, R.mipmap.emoj_73));
        emojiList.add(new EmojiBean(emoji_74, R.mipmap.emoj_74));
        emojiList.add(new EmojiBean(emoji_75, R.mipmap.emoj_75));
        emojiList.add(new EmojiBean(emoji_76, R.mipmap.emoj_76));
        emojiList.add(new EmojiBean(emoji_77, R.mipmap.emoj_77));
        emojiList.add(new EmojiBean(emoji_78, R.mipmap.emoj_78));
        emojiList.add(new EmojiBean(emoji_79, R.mipmap.emoj_79));

        emojiList.add(new EmojiBean(emoji_80, R.mipmap.emoj_80));
        emojiList.add(new EmojiBean(emoji_81, R.mipmap.emoj_81));
        emojiList.add(new EmojiBean(emoji_82, R.mipmap.emoj_82));
        emojiList.add(new EmojiBean(emoji_83, R.mipmap.emoj_83));
        emojiList.add(new EmojiBean(emoji_84, R.mipmap.emoj_84));
        emojiList.add(new EmojiBean(emoji_85, R.mipmap.emoj_85));
        emojiList.add(new EmojiBean(emoji_86, R.mipmap.emoj_86));
        emojiList.add(new EmojiBean(emoji_87, R.mipmap.emoj_87));
        emojiList.add(new EmojiBean(emoji_88, R.mipmap.emoj_88));
        emojiList.add(new EmojiBean(emoji_89, R.mipmap.emoj_89));

        emojiList.add(new EmojiBean(emoji_90, R.mipmap.emoj_90));
        emojiList.add(new EmojiBean(emoji_91, R.mipmap.emoj_91));
        emojiList.add(new EmojiBean(emoji_92, R.mipmap.emoj_92));
        emojiList.add(new EmojiBean(emoji_93, R.mipmap.emoj_93));
        emojiList.add(new EmojiBean(emoji_94, R.mipmap.emoj_94));
        emojiList.add(new EmojiBean(emoji_95, R.mipmap.emoj_95));
        emojiList.add(new EmojiBean(emoji_96, R.mipmap.emoj_96));
        emojiList.add(new EmojiBean(emoji_97, R.mipmap.emoj_97));
        emojiList.add(new EmojiBean(emoji_98, R.mipmap.emoj_98));
        emojiList.add(new EmojiBean(emoji_99, R.mipmap.emoj_99));

        emojiList.add(new EmojiBean(emoji_100, R.mipmap.emoj_100));
        emojiList.add(new EmojiBean(emoji_101, R.mipmap.emoj_101));
        emojiList.add(new EmojiBean(emoji_102, R.mipmap.emoj_102));
        emojiList.add(new EmojiBean(emoji_103, R.mipmap.emoj_103));
        emojiList.add(new EmojiBean(emoji_104, R.mipmap.emoj_104));
        emojiList.add(new EmojiBean(emoji_105, R.mipmap.emoj_105));
        emojiList.add(new EmojiBean(emoji_106, R.mipmap.emoj_106));
        emojiList.add(new EmojiBean(emoji_107, R.mipmap.emoj_107));
        emojiList.add(new EmojiBean(emoji_108, R.mipmap.emoj_108));
        emojiList.add(new EmojiBean(emoji_109, R.mipmap.emoj_109));
        emojiList.add(new EmojiBean(emoji_110, R.mipmap.emoj_110));
        return  emojiList;
    }

    private static void addPattern(Map<Pattern, Integer> map, String smile,
                                   int resource) {
        map.put(Pattern.compile(Pattern.quote(smile)), resource);
    }

    /**
     * replace existing spannable with smiles
     *
     * @param context
     * @param spannable
     * @return
     */
    public static boolean addEmojis(Context context, Spannable spannable) {
        boolean hasChanges = false;
        for (Map.Entry<Pattern, Integer> entry : emoticons.entrySet()) {
            Matcher matcher = entry.getKey().matcher(spannable);
            while (matcher.find()) {
                boolean set = true;
                for (ImageSpan span : spannable.getSpans(matcher.start(),
                        matcher.end(), ImageSpan.class)) {
                    if (spannable.getSpanStart(span) >= matcher.start()
                            && spannable.getSpanEnd(span) <= matcher.end()) {
                        spannable.removeSpan(span);
                    } else {
                        set = false;
                        break;
                    }
                }
                if (set) {
                    hasChanges = true;
                    spannable.setSpan(new ImageSpan(context, entry.getValue()),
                            matcher.start(), matcher.end(),
                            Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
                }
            }
        }
        return hasChanges;
    }

    public static Spannable getEmojisText(Context context, CharSequence text) {
        Spannable spannable = spannableFactory.newSpannable(text);
        addEmojis(context, spannable);
        return spannable;
    }

    public static boolean containsKey(String key) {
        boolean b = false;
        for (Map.Entry<Pattern, Integer> entry : emoticons.entrySet()) {
            Matcher matcher = entry.getKey().matcher(key);
            if (matcher.find()) {
                b = true;
                break;
            }
        }

        return b;
    }
}
